home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 2000 November: Tool Chest / Dev.CD Nov 00 TC Disk 1.toast / Sample Code / Graphics 3D / RaveEngineInfoSample / Source / RaveInfo.c next >
Encoding:
C/C++ Source or Header  |  2000-09-28  |  13.1 KB  |  323 lines  |  [TEXT/CWIE]

  1. /******************************************************************************
  2.  **                                                                             **
  3.  **     Module:        RAVEInfo.c                                                 **
  4.  **                                                                          **    
  5.  **     Purpose:     Outputs RAVE gestalt information.                          **
  6.  **                                                                          **
  7.  **     Author:        Robert Dierkes                                             **
  8.  **                                                                          **
  9.  **     Copyright (C) 1998-99 Apple Computer, Inc.  All rights reserved.     **
  10.  **                                                                          **
  11.  *****************************************************************************/
  12.  
  13. #include <ConditionalMacros.h>
  14. #include <RAVE.h>
  15. #include <QD3DAcceleration.h>
  16.  
  17. #include <stdio.h>
  18.  
  19. #include "RaveInfo.h"
  20.  
  21. /******************************************************************************
  22.  **                                                                          **
  23.  **     Macros                                                                 **
  24.  **                                                                          **
  25.  *****************************************************************************/
  26. #define    kMaxGestalts    100
  27. #define    TITLE_WIDTH        36
  28.  
  29. #if    defined(TARGET_OS_MAC) && (TARGET_OS_MAC)
  30.     /* Write standard output to SIOUX console */
  31.     #define    PRINT_1(_a)                    printf(_a)
  32.     #define    PRINT_2(_a, _b)                printf(_a, _b)
  33.     #define    PRINT_3(_a, _b, _c)            printf(_a, _b, _c)
  34.     #define    PRINT_4(_a, _b, _c, _d)        printf(_a, _b, _c, _d)
  35.     #define    PRINT_5(_a, _b, _c, _d, _e)    printf(_a, _b, _c, _d, _e)
  36.  
  37.     #define    kCharMark    '√'
  38.  
  39. #else
  40.     /* Write standard output to file */
  41.     #define    PRINT_1(_a)                    fprintf(fp, _a);fflush(fp);
  42.     #define    PRINT_2(_a, _b)                fprintf(fp, _a, _b);fflush(fp);
  43.     #define    PRINT_3(_a, _b, _c)            fprintf(fp, _a, _b, _c);fflush(fp);
  44.     #define    PRINT_4(_a, _b, _c, _d)        fprintf(fp, _a, _b, _c, _d);fflush(fp);
  45.     #define    PRINT_5(_a, _b, _c, _d, _e)    fprintf(fp, _a, _b, _c, _d, _e);fflush(fp);
  46.  
  47.     #define    kCharMark    '+'
  48.     #define    FILE_NAME    "RAVEInfo.out"
  49.  
  50. #endif /* TARGET_OS_WIN32 */
  51.  
  52.  
  53. #define    QA_ENGINE_GESTALT(_engine,_mask,_response)                                \
  54.         {    errs[g] = QAEngineGestalt(_engine,    _mask,    _response);                \
  55.             g++;                                                                \
  56.         }
  57.  
  58.  
  59. #define    PRINT_1_VALUE(_fmt, _title, _value)                                        \
  60.         {    if (errs[g] == kQANoErr) {                                            \
  61.                 PRINT_4(_fmt, TITLE_WIDTH, _title, _value);                        \
  62.             } else {                                                            \
  63.                 PRINT_4("%-*s%s", TITLE_WIDTH, _title, "<Gestalt unsupported>\n");\
  64.             }                                                                    \
  65.             g++;                                                                \
  66.         }
  67.  
  68.  
  69. #define    PRINT_2_VALUE(_fmt, _title, _value)                                        \
  70.         {    if (errs[g] == kQANoErr) {                                            \
  71.                 PRINT_5(_fmt, TITLE_WIDTH, _title, _value, _value);                \
  72.             } else {                                                            \
  73.                 PRINT_4("%-*s%s", TITLE_WIDTH, _title, "<Gestalt unsupported>\n");\
  74.             }                                                                    \
  75.             g++;                                                                \
  76.         }
  77.  
  78.  
  79. #define    PRINT_OPTION(_opt, _mask, _maskLast)                                    \
  80.             PRINT_4("%*s%c "#_maskLast"\n",                                        \
  81.                 TITLE_WIDTH, "",                                                \
  82.                 (_opt & _mask ## _maskLast) ? kCharMark : ' ');
  83.  
  84.  
  85. #define    PRINT_PIXEL_1_TYPE(_value, _maskLast)                                    \
  86.             PRINT_4("%*s%c "# _maskLast"\n",                                    \
  87.             TITLE_WIDTH, "",                                                    \
  88.             (_value & (1 << (kQAPixel_ ## _maskLast)))    ? kCharMark : ' ');
  89.  
  90.  
  91. #define    PRINT_PIXEL_TYPES(_fmt, _title, _value)                                    \
  92.         {    if (errs[g] == kQANoErr) {                                            \
  93.                 PRINT_4(_fmt, TITLE_WIDTH, _title, _value);                        \
  94.                 PRINT_PIXEL_1_TYPE(_value, Alpha1);                                \
  95.                 PRINT_PIXEL_1_TYPE(_value, RGB16);                                \
  96.                 PRINT_PIXEL_1_TYPE(_value, ARGB16);                                \
  97.                 PRINT_PIXEL_1_TYPE(_value, RGB32);                                \
  98.                 PRINT_PIXEL_1_TYPE(_value, ARGB32);                                \
  99.                 PRINT_PIXEL_1_TYPE(_value, CL4);                                \
  100.                 PRINT_PIXEL_1_TYPE(_value, CL8);                                \
  101.                 PRINT_PIXEL_1_TYPE(_value, RGB16_565);                            \
  102.                 PRINT_PIXEL_1_TYPE(_value, RGB24);                                \
  103.                 PRINT_PIXEL_1_TYPE(_value, RGB8_332);                            \
  104.                 PRINT_PIXEL_1_TYPE(_value, ARGB16_4444);                        \
  105.                 PRINT_PIXEL_1_TYPE(_value, ACL16_88);                            \
  106.                 PRINT_PIXEL_1_TYPE(_value, I8);                                    \
  107.                 PRINT_PIXEL_1_TYPE(_value, AI16_88);                            \
  108.                 PRINT_PIXEL_1_TYPE(_value, YUVS);                                \
  109.                 PRINT_PIXEL_1_TYPE(_value, YUVU);                                \
  110.                 PRINT_PIXEL_1_TYPE(_value, YVYU422);                            \
  111.                 PRINT_PIXEL_1_TYPE(_value, UYVY422);                            \
  112.             } else {                                                            \
  113.                 PRINT_4("%-*s%s", TITLE_WIDTH, _title, "<Gestalt unsupported>\n");\
  114.             }                                                                    \
  115.             g++;                                                                \
  116.         }
  117.  
  118.  
  119.  
  120. /******************************************************************************
  121.  **                                                                          **
  122.  **     RAVEGestaltInfo()                                                     **
  123.  **                                                                          **
  124.  *****************************************************************************/
  125. void RAVEGestaltInfo(void)
  126. {
  127.     TQAEngine        *engine = NULL;
  128.     TQAError        errs[kMaxGestalts];
  129.     unsigned long    count, g;
  130.     unsigned long    optionalFeatures;
  131.     unsigned long    fastFeatures;
  132.     long            vendorID;
  133.     long            engineID;
  134.     long            nameLength;
  135.     char             name[200];
  136.     long            revision;
  137.     unsigned long    textureMemory;
  138.     unsigned long    fastTextureMemory;
  139.     /* 1.6 -> */
  140.     unsigned long    dcPixelTypesAllowed;
  141.     unsigned long    dcPixelTypesPreferred;
  142.     unsigned long    txPixelTypesAllowed;
  143.     unsigned long    txPixelTypesPreferred;
  144.     unsigned long    bmPixelTypesAllowed;
  145.     unsigned long    bmPixelTypesPreferred;
  146.     unsigned long    optionalFeatures2;
  147.     unsigned long    multiTextureMax;
  148.  
  149. #if    defined(TARGET_OS_WIN32) && (TARGET_OS_WIN32)
  150.     FILE             *fp;
  151.  
  152.     fp = fopen(FILE_NAME, "w");
  153.     if (fp == NULL) {
  154.         return;
  155.     }
  156. #endif /* TARGET_OS_WIN32 */
  157.  
  158.  
  159. #if    defined(TARGET_OS_MAC) && (TARGET_OS_MAC)
  160.     PRINT_4("\n%-*s%s", TITLE_WIDTH, "RAVE Gestalt Information", "Power Macintosh");
  161. #elif defined(TARGET_OS_WIN32) && (TARGET_OS_WIN32)
  162.     PRINT_4("\n%-*s%s", TITLE_WIDTH, "RAVE Gestalt Information", "Win32");
  163. #else
  164.     PRINT_4("\n%-*s%s", TITLE_WIDTH, "RAVE Gestalt Information", "<Unknown Platform>");
  165. #endif
  166.     PRINT_1("\n--------------------------------------------------------------\n\n");
  167.  
  168.     QAEngineEnable (kQAVendor_Apple, kQAEngine_AppleHW);
  169.  
  170.     count = 0;
  171.     engine = QADeviceGetFirstEngine(NULL);
  172.     while (engine) {
  173.  
  174.         g = 0;
  175.         QA_ENGINE_GESTALT(engine, kQAGestalt_ASCIINameLength, &nameLength);
  176.         if ((nameLength < 200) && (nameLength > 0)) {
  177.             QA_ENGINE_GESTALT(engine, kQAGestalt_ASCIIName,    name);
  178.             PRINT_5("Engine %u:%-*s\"%s\"\n", count+1, TITLE_WIDTH-9, "", name);
  179.         } else {
  180.             PRINT_5("Engine %u:%-*s\"%s\"\n", count+1, TITLE_WIDTH-9, "", "<Unknown>");
  181.         }
  182.  
  183.         count++;
  184.         engine = QADeviceGetNextEngine(NULL, engine);
  185.     }
  186.     PRINT_1("\n--------------------------------------------------------------\n");
  187.  
  188.  
  189.     /* Cycle through all available engines getting gestalt information */
  190.     engine = QADeviceGetFirstEngine(NULL);
  191.     while (engine) {
  192.  
  193.         /* Get gestalt responses */
  194.         for (g = kMaxGestalts; --g;) {
  195.             errs[g] = kQANoErr;
  196.         }
  197.         g = 0;
  198.  
  199.         QA_ENGINE_GESTALT(engine,    kQAGestalt_ASCIINameLength,        &nameLength);
  200.         if ((nameLength < 200) && (nameLength > 0)) {
  201.             QA_ENGINE_GESTALT(engine,    kQAGestalt_ASCIIName,        name);
  202.         } else {
  203.             name[0] = 0;
  204.             g++;
  205.         }
  206.         QA_ENGINE_GESTALT(engine,    kQAGestalt_VendorID,            &vendorID);
  207.         QA_ENGINE_GESTALT(engine,    kQAGestalt_EngineID,            &engineID);
  208.         QA_ENGINE_GESTALT(engine,    kQAGestalt_Revision,            &revision);
  209.         QA_ENGINE_GESTALT(engine,    kQAGestalt_TextureMemory,        &textureMemory);
  210.         QA_ENGINE_GESTALT(engine,    kQAGestalt_FastTextureMemory,    &fastTextureMemory);
  211. /*1.6*/    QA_ENGINE_GESTALT(engine,    kQAGestalt_MultiTextureMax,        &multiTextureMax);
  212.  
  213. /*1.6*/    QA_ENGINE_GESTALT(engine,    kQAGestalt_DrawContextPixelTypesAllowed,    &dcPixelTypesAllowed);
  214. /*1.6*/    QA_ENGINE_GESTALT(engine,    kQAGestalt_DrawContextPixelTypesPreferred,    &dcPixelTypesPreferred);
  215. /*1.6*/    QA_ENGINE_GESTALT(engine,    kQAGestalt_TexturePixelTypesAllowed,        &txPixelTypesAllowed);
  216. /*1.6*/    QA_ENGINE_GESTALT(engine,    kQAGestalt_TexturePixelTypesPreferred,        &txPixelTypesPreferred);
  217. /*1.6*/    QA_ENGINE_GESTALT(engine,    kQAGestalt_BitmapPixelTypesAllowed,            &bmPixelTypesAllowed);
  218. /*1.6*/    QA_ENGINE_GESTALT(engine,    kQAGestalt_BitmapPixelTypesPreferred,        &bmPixelTypesPreferred);
  219.  
  220.         QA_ENGINE_GESTALT(engine,    kQAGestalt_OptionalFeatures,    &optionalFeatures);
  221. /*1.6*/    QA_ENGINE_GESTALT(engine,    kQAGestalt_OptionalFeatures2,    &optionalFeatures2);
  222.         QA_ENGINE_GESTALT(engine,    kQAGestalt_FastFeatures,        &fastFeatures);
  223.  
  224.  
  225.         /* Print responses (must be in same order as above) */
  226.         g = 1;    /* Don't print ASCIINameLength */
  227.         PRINT_1("\n");
  228.         PRINT_1_VALUE("%-*s\"%s\"\n",        "Engine Name:",            name);
  229.         PRINT_2_VALUE("%-*s%08u\t0x%08X\n",    "Vendor ID:",            vendorID);
  230.         PRINT_2_VALUE("%-*s%08u\t0x%08X\n",    "Engine ID:",            engineID);
  231.         PRINT_2_VALUE("%-*s%08u\t0x%08X\n",    "Revision:",            revision);
  232.         PRINT_2_VALUE("%-*s%08u\t0x%08X\n",    "Texture Memory:",        textureMemory);
  233.         PRINT_2_VALUE("%-*s%08u\t0x%08X\n",    "Fast Texture Memory:",    fastTextureMemory);
  234. /*1.6*/    PRINT_2_VALUE("%-*s%08u\t0x%08X\n",    "Multi Texture Maximum:",multiTextureMax);
  235.  
  236. /*1.6*/    PRINT_PIXEL_TYPES("%-*s0x%08X\n",    "Draw Context Pixel Types Allowed:",    dcPixelTypesAllowed);
  237. /*1.6*/    PRINT_PIXEL_TYPES("%-*s0x%08X\n",    "Draw Context Pixel Types Preferred:",    dcPixelTypesPreferred);
  238. /*1.6*/    PRINT_PIXEL_TYPES("%-*s0x%08X\n",    "Texture Pixel Types Allowed:",            txPixelTypesAllowed);
  239. /*1.6*/    PRINT_PIXEL_TYPES("%-*s0x%08X\n",    "Texture Pixel Types Preferred:",        txPixelTypesPreferred);
  240. /*1.6*/    PRINT_PIXEL_TYPES("%-*s0x%08X\n",    "Bitmap Pixel Types Allowed:",            bmPixelTypesAllowed);
  241. /*1.6*/    PRINT_PIXEL_TYPES("%-*s0x%08X\n",    "Bitmap Pixel Types Preferred:",        bmPixelTypesPreferred);
  242.  
  243.         PRINT_1_VALUE("%-*s0x%08X\n",        "Optional Features:",    optionalFeatures);
  244.         if (errs[g-1] == kQANoErr) {
  245.             PRINT_OPTION(optionalFeatures, kQAOptional_, DeepZ);
  246.             PRINT_OPTION(optionalFeatures, kQAOptional_, Texture);
  247.             PRINT_OPTION(optionalFeatures, kQAOptional_, TextureHQ);
  248.             PRINT_OPTION(optionalFeatures, kQAOptional_, TextureColor);
  249.             PRINT_OPTION(optionalFeatures, kQAOptional_, Blend);
  250.             PRINT_OPTION(optionalFeatures, kQAOptional_, BlendAlpha);
  251.             PRINT_OPTION(optionalFeatures, kQAOptional_, Antialias);
  252.             PRINT_OPTION(optionalFeatures, kQAOptional_, ZSorted);
  253.             PRINT_OPTION(optionalFeatures, kQAOptional_, PerspectiveZ);
  254.             PRINT_OPTION(optionalFeatures, kQAOptional_, OpenGL);
  255.             PRINT_OPTION(optionalFeatures, kQAOptional_, NoClear);
  256.             PRINT_OPTION(optionalFeatures, kQAOptional_, CSG);
  257.             PRINT_OPTION(optionalFeatures, kQAOptional_, BoundToDevice);
  258.             PRINT_OPTION(optionalFeatures, kQAOptional_, CL4);
  259.             PRINT_OPTION(optionalFeatures, kQAOptional_, CL8);
  260.             PRINT_OPTION(optionalFeatures, kQAOptional_, BufferComposite);
  261.             PRINT_OPTION(optionalFeatures, kQAOptional_, NoDither);
  262.             /* 1.6 ->*/
  263.             PRINT_OPTION(optionalFeatures, kQAOptional_, FogAlpha);
  264.             PRINT_OPTION(optionalFeatures, kQAOptional_, FogDepth);
  265.             PRINT_OPTION(optionalFeatures, kQAOptional_, MultiTextures);
  266.             PRINT_OPTION(optionalFeatures, kQAOptional_, MipmapBias);
  267.             PRINT_OPTION(optionalFeatures, kQAOptional_, ChannelMask);
  268.             PRINT_OPTION(optionalFeatures, kQAOptional_, ZBufferMask);
  269.             PRINT_OPTION(optionalFeatures, kQAOptional_, AlphaTest);
  270.             PRINT_OPTION(optionalFeatures, kQAOptional_, AccessTexture);
  271.             PRINT_OPTION(optionalFeatures, kQAOptional_, AccessBitmap);
  272.             PRINT_OPTION(optionalFeatures, kQAOptional_, AccessDrawBuffer);
  273.             PRINT_OPTION(optionalFeatures, kQAOptional_, AccessZBuffer);
  274.             PRINT_OPTION(optionalFeatures, kQAOptional_, ClearDrawBuffer);
  275.             PRINT_OPTION(optionalFeatures, kQAOptional_, ClearZBuffer);
  276.             PRINT_OPTION(optionalFeatures, kQAOptional_, OffscreenDrawContexts);
  277.         }
  278.  
  279. /*1.6*/    PRINT_1_VALUE("%-*s0x%08X\n",        "Optional Features 2:",    optionalFeatures2);
  280.         if (errs[g-1] == kQANoErr) {
  281.             PRINT_OPTION(optionalFeatures2, kQAOptional2_, TextureDrawContexts);
  282.             PRINT_OPTION(optionalFeatures2, kQAOptional2_, BitmapDrawContexts);
  283.             PRINT_OPTION(optionalFeatures2, kQAOptional2_, Busy);
  284.             PRINT_OPTION(optionalFeatures2, kQAOptional2_, SwapBuffers);
  285.             PRINT_OPTION(optionalFeatures2, kQAOptional2_, Chromakey);
  286.             PRINT_OPTION(optionalFeatures2, kQAOptional2_, NonRelocatable);
  287.             PRINT_OPTION(optionalFeatures2, kQAOptional2_, NoCopy);
  288.             PRINT_OPTION(optionalFeatures2, kQAOptional2_, PriorityBits);
  289.             PRINT_OPTION(optionalFeatures2, kQAOptional2_, FlipOrigin);
  290.             PRINT_OPTION(optionalFeatures2, kQAOptional2_, BitmapScale);
  291.             PRINT_OPTION(optionalFeatures2, kQAOptional2_, DrawContextScale);
  292.             PRINT_OPTION(optionalFeatures2, kQAOptional2_, DrawContextNonRelocatable);
  293.         }
  294.  
  295.         PRINT_1_VALUE("%-*s0x%08X\n",        "Fast Features:",        fastFeatures);
  296.         if (errs[g-1] == kQANoErr) {
  297.             PRINT_OPTION(fastFeatures, kQAFast_, Line);
  298.             PRINT_OPTION(fastFeatures, kQAFast_, Gouraud);
  299.             PRINT_OPTION(fastFeatures, kQAFast_, Texture);
  300.             PRINT_OPTION(fastFeatures, kQAFast_, TextureHQ);
  301.             PRINT_OPTION(fastFeatures, kQAFast_, Blend);
  302.             PRINT_OPTION(fastFeatures, kQAFast_, Antialiasing);
  303.             PRINT_OPTION(fastFeatures, kQAFast_, ZSorted);
  304.             PRINT_OPTION(fastFeatures, kQAFast_, CL4);
  305.             PRINT_OPTION(fastFeatures, kQAFast_, CL8);
  306. /*1.6*/        PRINT_OPTION(fastFeatures, kQAFast_, FogAlpha);
  307. /*1.6*/        PRINT_OPTION(fastFeatures, kQAFast_, FogDepth);
  308. /*1.6*/        PRINT_OPTION(fastFeatures, kQAFast_, MultiTextures);
  309. /*1.6*/        PRINT_OPTION(fastFeatures, kQAFast_, BitmapScale);
  310. /*1.6*/        PRINT_OPTION(fastFeatures, kQAFast_, DrawContextScale);
  311.         }
  312.  
  313.         PRINT_1("\n--------------------------------------------------------------\n");
  314.  
  315.         engine = QADeviceGetNextEngine(NULL, engine);
  316.     }
  317.  
  318. #if    defined(TARGET_OS_WIN32) && (TARGET_OS_WIN32)
  319.     fclose(fp);
  320. #endif /* TARGET_OS_WIN32 */
  321. }
  322.  
  323.